<?php

/**
 * @name user.php
 * @copyright (c) 2011
 */
App::uses('AuthComponent', 'Controller/Component');

class User extends AppModel {

    var $name = 'User';

    /**
     * associations
     */
    var $hasMany = array(
        'CompanyUser' => array(
            'className' => 'CompanyUser',
            'foreignKey' => 'user_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );

    # Validation rules.
    var $validate = array(
        'username' => array(
            'notNull' => array(
                'rule' => 'notEmpty',
                'required' => true,
                'message' => 'The Login Name must not be null and it is required',
                'last' => true
            ),
            'alphanumeric' => array(
                'rule' => 'alphaNumeric',
                'required' => true,
                'message' => 'Login must be alphanumeric.',
                'last' => true
            )
        ),
        /* 'first_name' => array(
          'notNull' =>array(
          'rule' => 'notEmpty',
          'required' => true,
          'message' => 'The Fisrt Name must not be null and it is required',
          'last' => true
          ),
          'alphanumeric' => array(
          'rule' => 'alphaNumeric',
          'required' => true,
          'message' => 'Fisrt Name must be alphanumeric.',
          'last' => true
          )
          ),
          'last_name' => array(
          'notNull' =>array(
          'rule' => 'notEmpty',
          'required' => true,
          'message' => 'The Last Name must not be null and it is required',
          'last' => true
          ),
          'alphanumeric' => array(
          'rule' => 'alphaNumeric',
          'required' => true,
          'message' => 'Last Name must be alphanumeric.',
          'last' => true
          )
          ), */
        'password' => array(
            'rule' => 'notEmpty',
            'required' => true,
            'message' => 'The Password must not be null and it is required'
        )
    );

    public function beforeSave() {
        if( isset($this->data[$this->alias]['password']) ) {
            $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
        }
        return true;
    }

    /**
     * This function retrieves all the users from the database tables users.
     * @name getAllUsers
     * @param void
     * @return mixed. Array containing the data retrieved.
     * @access public
     */
    function getAllUsers() {
        # fetch the data and return it.
        return $this->find('all', array('conditions' => array('User.deleted' => 'n'), 'recursive' => -1));
    }

    /**
     * This function retrieves the user data based upon his/her id
     * @name getUserById
     * @param string $userId string holding the user id.his parameter is defaulted to null.
     * When it is null it means that cake is going to use the ActiveRecord system to retrieve the data.
     * @return mixed. Array containing the user data.
     * @access public
     */
    function getUserById($userId = null, $recursive = 1) {
        $conditions = array(
            'User.id' => $userId,
            'User.deleted' => 'n'
        );
        # fetch the specific data from the server and retrun it.
        return $this->find('first', array('conditions' => $conditions, 'recursive' => $recursive));
    }

    # User Data manipulation functions
    /**
     * This function retrieves the user by his login name
     * @name getUserByLoginName
     * @param string $loginName
     * @return array of data containing the login name and the user password
     * @access public
     */

    function getUserByLoginName($loginName = null) {
        # search condition
        $conditions = array(
            'User.username' => $loginName,
            'User.deleted' => 'n'
        );
        # fetch the specific data from the server and retrun it.
        return $this->find('first', array('conditions' => $conditions, 'recursive' => 1));
    }

}

?>
